main() {
  // 函数的调用
  textPrint();
  print(add(20, 10));
  slice(10);
  slice2(25, b: 20, c: 30);
 
  void fn(String data) {
    print('fn：' + data);
  }
  // 参数：不是匿名函数
  textCallback(fn);
  // 参数：匿名函数
  textCallback((String data) {
    print('匿名函数：' + data);
  });
  textCallback2((int data) {
    print('匿名函数2：' + data.toString());
  });

  print(sum(30, 40));
  print(sum2(50, 60));

}

// 1. 定义一个函数
  // 函数的定义
void textPrint() {
  print('你好');
}

// flutter定义函数 可以省略返回类型和参数类型 类型(void/其他类型) 函数名() {}
// 不建议省略，省略返回类型会导致不能.出来返回类型的内置方法，不写参数类型会导致调用函数传进来的实参没有限制，虽然没有报错，但是运行不起来
// 2. 加法函数
int add(int a, int b) {
  return a + b;
}

// 3. 可选位置参数
// 可选参数 定义函数时可以在参数名前添加中括号 [] 来表示可选参数
// 调用函数时可以不传递可选参数，也可以传递可选参数
// 可选参数可以有一个默认值
void slice(int a, [int? b, int c = 0]) {
  print(a + (b ?? 0) + c);
}

// 4. 可选命名参数（常见）
void slice2(int start, {int? a, int? b, int c = 0}) {
  print( start + (a ?? 0) + (b ?? 0) + c);
}

// 5. 回调函数
// 回调函数是一个函数作为参数传递给另一个函数
// 回调函数的定义
void textCallback(Function callback) {
  callback('回传的数据');
}
// 5.1 回调函数约束增强
// 回调函数的参数可以添加类型约束
void textCallback2(void Function(int data) callback) {
  callback(1314);
}


// 6. 箭头函数，求和
int sum(int a, int b) {
  return a + b;
}
// 箭头函数的定义
int sum2(int a, int b) => a + b;


